//外部类A
public class A {
    int a = 100;
    public void mA(){
        System.out.println("外部类的方法");
    }
    //局部内部类
    public void methodInnerClass(){
        class Inner{
            int i = 777;
            String in = "局部内部类";
            public void innerM1(){
                System.out.println("局部内部类");
            }
        }
        Inner inner = new Inner();
    }

    //实例内部类B
    class B {
        //实例内部类不能存在静态成员 -> 不能单独使用static修饰内部类的成员变量 -> 但是可以存在常量成员：final和static同时使用
        /*
         内部类的使用特点：
            可以调用外部类的所有成员 -> 变量和方法
            可以在内部类去new外部类对象，也可以在外部类new内部类对象
            内部类中获取不同变量的方法：
              1.局部变量：变量名
              2.内部类中成员变量：this.变量名
              3.外部类中成员变量：外部类名.this.变量名
         */
        int b = 10;
        public void mB(){
            System.out.println("内部类的方法");
        }
    }
    //静态内部类C
    static class C{
        //默认添加final关键词
        /*
         静态内部类的使用特点：
            静态内部类不能调用外部类中非静态类成员 -> 需要先实例化后通过对象名调用
            可以访问外部类的静态成员
         */
        int c1 = 5;
        static int c2 = 10; //变为常量 -> 变量名斜体
        String nameC = "静态内部类C"; //有final，但是没static，不是常量，只是一个不能修改的变量
        public static void mC(){
            System.out.println("静态内部类的静态方法");
        }
        public void methodC(){
            System.out.println("静态内部类的成员方法");
        }
    }
}